脑科学方向 | Python3在科研里的使用
Hello,
这里是行上行下,我是喵君姐姐~
Python有什么用,不想学怎么办?但是当我知道别人用代码一晚上就搞定我一个星期的活的时候,我就知道不学还得学。
近几年,Python语言备受关注,也是Toble编程语言排行榜上市场占有份额增速最快的开发语言之一。Python语言的火热,更好的让基于数据驱动的新技术的发展和应用,如人工智能、大数据、云计算等。另外,它是开源语言,这意味着它可以免费入手,有着相当活跃的社区,对于小白十分友好。
当前,关于学习Python语言的书籍、课件等资料几乎是触手可及,但大多为普适资源,少有针对性,如在科学研究领域中,如何将Python作为科研工具使用。涉及到这一课题的问题主要有:Python在科研当中,适合做什么?有哪些必须要掌握的基础知识技能?怎样花费最短的时间和精力去学习那些最精华的、使用最广泛的技术与技巧?
心理学、教育学的学者们已达成共识,对不同学习需要的学习者,对相同学习内容的学习目标是存在差异的。很显然,如果只是想将Python作为“心理与教育”科研辅助工具,那么完全不用像程序开发人员那样,去掌握Python垃圾回收机制等内容。
因此,本系列文章《Python3科研基础篇》(简称《基础篇》)旨在,从科研的实际应用出发,帮助初学者学习最重要的Python3的开发基础。Python3作为科研工具的可以归纳为两个重要方面:
1. 数据分析与绘图
数据分析本身也是一系列功能的概括,如撰写论文时,利用Python3绘制精美的图表;利用Python3实现心理与教育统计的描述性统计、假设检验、结构方程等,得到实验数据的统计分析结果;利用机器学习、统计学习、深度学习(这三个概念是有明显区别的,若后续有机会将进行三者概念的界定)等框架和模型对实验数据进行训练,以完成对某些事物的分类或预测。当然,也包括着各种各样的科学计算,如矩阵运算、微分积分等。
2. 演示平台
有很多科研项目,需要开发出demo(试用性的软件、系统或平台)。这即涉及到Python3开发常见的前端应用级桌面软件或移动APP,更涉及到Python3后端的开发。举个深度学习里物品图片识别的例子,假定需要开发一个简单的物品图片识别平台,比较常用的做法,就是移动APP作为客户端用于和用户的交互,而后端则是利用已训练好的深度学习模型来识别用户上传的物品图片。可见,在这一方面,Python3后端的开发更为重要。
诚然,Python3还可以做更多的事情。但《基础篇》系列文章里,目的是要让初学者能够了解Python3如何成为科研工具,打好Python3的语言地基,以掌握基本语法为核心。
Python3的入门难点
Python3是Python3语言3.x版本的统称,在前几年,还是Python2.7(最后一个Python2.x)的天下,但现在,Python3占据主流。Python2.x和Python3.x在语法上区别较大,《基础篇》只以Python3.x为例,Python2.x请自行学习。实际上,Python3的内置函数只有80多个,可谓非常的少,而Python3却几乎可以满足任何的开发需求,从游戏引擎到单片机,依靠的是其大量的第三方库。
初学者对于Python3会存在很大疑惑,因为它好像和如C#、java等语言都不同,不明白什么是脚本语言、解释性语言,看似其没有特定的开发环境、也不编译出什么东西、连界面都没有。
如果你是一名初学者,想彻底弄清楚上述概念实在不太容易,起码要明白《汇编语言》、《编译原理》、《数据结构》这三门课程。这里,尽量解释得简单一点。
脚本语言其实不应该算作一个术语,而是一个称呼,一些轻量级的、偏应用级上层的、封装度高的语言都可以叫做脚本语言,脚本语言大体可以和常见的解释性语言对等,如Python、Lua、JavaScript。
所谓解释性语言,是和编译性语言相对应(如C、C++),我们可以简单认为,解释性语言是由编译性语言开发。Python和Lua是非常相似的,都是高度模块化的语言,也都是C、C++开发的。
如果想深入了解,可以去学习Lua,最初的Lua由仅仅1万行纯c代码实现,对于学习如何开发一门编程语言(词法分析、语法分析等)非常有必要。
为什么叫解释性语言呢?因为它的核心是由C\C++开发的解释器,或称为虚拟机,这里的虚拟机不是vmware上类似的虚拟机器,而是一种语言解释性执行的引擎。
那么,Python解释器解释了什么呢?如果稍微了解过汇编语言(arm或Intel8086),就一定知道汇编指令。试想,如果想用C、C++去开发一门编程语言,这门语言就也要有汇编指令,但真实的汇编指令是能够直接跑在arm或Intel8086的系列芯片上的,而这门语言的汇编指令是虚拟的,只能跑在其解释器里。因此,很多人认为“Python好像只有文本看到的代码,无法编译出二进制文件”这个观点是错误的,如.pyc文件就是一个明显的二进制文件。
另外,Python是由C++开发,底层可以理解为就是C++,因此,虽然运行速度慢是解释性语言的通病,但并非难以解决,如使用Cpython库就可以使得Python和C++互相桥接并让Python运行速度和C++几乎不会有差别,有时这是非常必要的,如要进行底层图形化引擎或显卡某种功能的开发。
至于开发环境,Python并不需要类似于微软visual studio等开发平台,安装Python的安装包,实质就是安装了Python的运行环境,不需要其他任何开发平台就可以运行写在记事本里的Python代码。
《基础篇》会推荐VScode这种专用于写代码的文本编辑器为开发环境,也不会去使用Anocanda等Python发行版,下一节会重点介绍。
再次,是界面的问题,看起来Python没有软件界面所需要的控件,事实上Python里的界面也是代码写出来的,如使用自带的Thinker库,或者使用PYQT等。理解了以上内容,Python3就易于接受了。
最后,后续可能还会介绍在科研用的第三方包的介绍,比如scipy,skit-learn,numpy,matplotlib,MNE等等。欢迎大家持续关注哟~
分享完毕,希望有所帮助。
更多阅读:
1. 汇编语言有多少种?
https://www.zhihu.com/question/360999955
2. Joel Lee细述了为何Python很有用
http://www.makeuseof.com/tag/reasons-python-programming-not-useless/
《行上行下 . 科研交流群》
一个人是不是很无趣又难以坚持呢,长按下方二维码加入我们吧!
相关资料或者优惠活动将在群里第一时间通知哟(若是添加不上,可加小助手微信:zhy_psy)~
PS:后台回复关键词“脑科学书籍”,即可获得部分脑科学相关书籍资料啦!
作者:喵君
校对:喵君姐姐